package spectra.ee.web.product.service;

import spectra.ee.web.product.model.Product;
import spectra.ee.web.product.model.ProductCompare;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import com.ibatis.sqlmap.client.SqlMapClient;
import spectra.base.log.Logger;
import spectra.base.sql.ibatis.SqlMapperWeb;
import spectra.base.util.StringUtil;
import spectra.ee.web.WebPublic;

/**
 * 제품비교 관련 클래스.
 *
 * @author bkkim
 */
public class ProductServiceBase
{

    /** Logger객체. */
    private static Logger logger = Logger.getLoggerInstance(ProductServiceBase.class.getName());

    /** SqlMapClient 객체. */
    protected static SqlMapClient sqlMap = SqlMapperWeb.getSqlMapWebInstance();

    /**
     * 제품 카테고리를 트리형태로 가져오는 메소드
     * @param strParentId
     * @return
     */
    public List selectNodeListForTree(String nodeId)
    {
        List list = null;
        if(StringUtil.isEmpty(nodeId))
        	nodeId = WebPublic.PRODUCT_NODE_ROOT_ID;
        try
        {
            list = (List)sqlMap.queryForList("Product.selectNodeListForTree", nodeId);
        }
        catch (SQLException e)
        {
            logger.error(e.getMessage());
        }
        return list;
    }
    
    /**
     * <pre>
     * 해당 카테고리에 속하는 제품 리스트의 개수를 가져오는 메소드
     * </pre>.
     *
     * @param strNodeId 노드아이디.
     * @return 해당 카테고리에 속하는 제품 리스트의 개수.
     * @throws Exception the exception.
     */
    public int selectProductListCount(String strNodeId) throws Exception
    {
        return ((Integer)sqlMap.queryForObject("Product.selectProductListCount", strNodeId)).intValue();
    }
     
    /**
     * <pre>
     * 해당 카테고리에 속하는 제품 리스트를 가져오는 메소드
     * </pre>.
     *
     * @param iRowsPerPage 한 페이지마다 가져올 리스트 개수.
     * @param iPageNo 현재 페이지.
     * @param strNodeId 노드아이디.
     * @return List 해당 카테고리에 속하는 제품 리스트.
     */
    public List selectProductList(int iRowsPerPage, int iPageNo, String strNodeId)
    {
        List listRet = null;
        int iStartNum = iRowsPerPage * (iPageNo - 1) + 1;

        Product product = new Product();
        product.setEndNo(iPageNo * iRowsPerPage);
        product.setStartNo(iStartNum);
        product.setNodeId(strNodeId);
        product.setRowsPerPage(iRowsPerPage);
        try
        {
            listRet = (List)sqlMap.queryForList("Product.selectProductList", product);
        }
        catch (SQLException e)
        {
            logger.error(e.getMessage());
        }
        return listRet;
    }
      
    public String selectNodeName(String nodeId)
    {
    	String nodeName = "";
    	try
        {
            nodeName = (String) sqlMap.queryForObject("Product.selectNodeNameById", nodeId);
        }
        catch (SQLException e)
        {
            logger.error(e.getMessage());
        }
        return nodeName;
    }
      
    public List selectProductCompareList(String productIds)
    {
        List listRet = null;
    	Product product = new Product();
    	product.setProductIds(productIds);
        try
        {
    		listRet = (List)sqlMap.queryForList("Product.selectProductCompareList", product);
        }
        catch (SQLException e)
        {
            logger.error(e.getMessage());
        }
        return listRet;
    }
      
    public List productCompareView(String productIds)
    {
    	ProductCompare productCompare = new ProductCompare(productIds);
    	List list = null;
    	try
        {
    		list = (List)sqlMap.queryForList("Product.selectProductCompareViewList", productCompare);
        }
        catch (SQLException e)
        {
            logger.error(e.getMessage());
        }
        return list;
    }
}
